package proyectoX.src.entidades;

import java.awt.Rectangle;

import javax.swing.ImageIcon;
import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.Espejo;
import proyectoX.src.armas.Rastreador;
import proyectoX.src.armas.laser;

/**
 * Nave mediana. Tiene un equilibrio entre potencia, puntos de vida y velocidad.
 *
 */
public class Mediana extends Principal {
	private Rastreador secundario;
	private Espejo habilidad;

	/**
	 * Crea una nave con los datos pasados por parámetro. 
	 * @param velocidad Velocidad de desplazamiento.
	 * @param ref Imagen a utilizar.
	 * @param nivel Nivel actual.
	 * @param l Láser a utilizar.
	 */
	public Mediana(int velocidad, ImageIcon ref, Nivel nivel,laser l) {
		super(velocidad,ref,nivel,4,l);
		habilidad = new Espejo(nivel);
		secundario = new Rastreador(nivel);
	}

	/**
	 * Activa la habilidad especial, un espejo que hace rebotar a todas las municiones
	 * del juego (incluyendo las propias).
	 */
	protected void activarHabilidadEspecial() {
		if (habilidad.getMuniciones()>0) {
			habilidad.disparar(this.getLocation());
			habilidad.setMuniciones(habilidad.getMuniciones()-1);
			nivel.actualizarMunicionesHabilidad();
		}
	}

	/**
	 * Dispara su arma secundaria, misiles que persiguen a la nave enemiga más cercana
	 * a la nave jugadora.
	 */
	protected void dispararArmaSecundaria() {
		secundario.disparar(this.getLocation());
		nivel.actualizarMunicionesArma();
	}

	/**
	 * Dispara su láser.
	 */
	protected void dispararArmaPrincipal() {
		laser.disparar(this.getLocation());		
	}

	/**
	 * Devuelve el área de colisión. 
	 * @return Área de colisión. 
	 */
	public Rectangle getBounds() {
		return new Rectangle(this.getX()+3, this.getY()+2, 40, 14); 
	}

	@Override
	/** 
	 * Incrementa la cantidad de municiones de la habilidad especial en la cantidad
	 * pasada por parámetro.
	 * @param c Cantidad a incrementar.
	 */
	public void aumentarMunicionesHabilidad(int c) {
		habilidad.setMuniciones(habilidad.getMuniciones()+c);
	}

	@Override
	/** 
	 * Incrementa la cantidad de municiones del arma secundario en la cantidad
	 * pasada por parámetro.
	 * @param c Cantidad a incrementar.
	 */
	public void aumentarMunicionesArma(int c) {
		secundario.setMuniciones(secundario.getMuniciones()+c);
		
	}

	@Override
	/**
	 * Devuelve la cantidad de municiones de habilidad especial.
	 * @return La cantidad de municiones restantes.
	 */
	public int getMunicionesHabilidad() {
		return habilidad.getMuniciones();
	}

	@Override
	/**
	 * Devuelve la cantidad de municiones de arma secundaria.
	 * @return La cantidad de municiones restantes.
	 */
	public int getMunicionesArma() {
		return secundario.getMuniciones();
	}
}

